package io.mft.as.ar.gateway.result;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import io.mft.commons.function.response.kv.KVMap;
import io.mft.commons.function.response.kv.PageObject;
import lombok.Getter;
import lombok.Setter;

/**
 *
 * 描述:账户系统返回结果集
 * 版权:	Copyright (c) 2011
 * 公司:	 思迪科技
 * 作者:	 李伟
 * 版本:	 1.0
 * 创建日期: 2012-12-13
 * 创建时间: 上午10:56:14
 */
public class Result
{


	public enum ARDsType{
		list,page
	}
	@Getter
	@Setter
	public class ARDsName{
		ARDsType arDsType;
		String name;
	}
	Map<String, List<KVMap>> dataMap=new HashMap<String, List<KVMap>>();
	Map<String, PageObject<KVMap>> pageMap=new HashMap<>();
	private int errorNo;
	private String errorInfo;
	private List<ARDsName> dsNameList=new ArrayList<>();
	public int getErr_no()
	{
		return errorNo;
	}

	public void setErr_no(int errNo)
	{
		this.errorNo=errNo;
	}

	public String getErr_info()
	{
		return errorInfo;
	}

	public void setErr_info(String errInfo)
	{
		this.errorInfo=errInfo;
	}

	


	/**
	 *
	 * 描述：获取结果集数量
	 * 作者：李炜
	 * 时间：Apr 29, 2014 5:45:52 PM
	 * @return
	 */
	public int getDataSetNum()
	{
		return this.getDsNameArr().size();
	}


	/**
	 *
	 * 描述：
	 * 作者：李炜
	 * 时间：Apr 30, 2014 9:33:24 AM
	 * @param name
	 * @param dataRow
	 */
	public void setResult(String name, KVMap dataRow)
	{
		List<KVMap> dataList = new ArrayList<>();
		dataList.add(dataRow);
		setResult(name, dataList);
	}



	/**
	 *
	 * 描述：添加结果集
	 * 作者：李炜
	 * 时间：Apr 29, 2014 9:14:44 PM
	 * @param name
	 * @param dbPage
	 */
	public void setResult(String name, PageObject<KVMap> dbPage)
	{
		dataMap.put(name, dbPage.getList());
		pageMap.put(name, dbPage);
		this.setDsName(ARDsType.page,name);
	}



	/**
	 *
	 * 描述：添加结果集
	 * 作者：李炜
	 * 时间：Apr 29, 2014 5:42:00 PM
	 * @param name
	 * @param results
	 */
	public void setResult(String name, List<KVMap> results)
	{
	
		this.setDsName(ARDsType.list, name);
		dataMap.put(name, results);
	}

	/**
	 *
	 * 描述：根据结果集名称返回结果集
	 * 作者：李炜
	 * 时间：May 22, 2013 10:22:45 AM
	 * @param index
	 * @return
	 */
	public List<KVMap> getList(String dsName)
	{
		return dataMap.get(dsName);
		/**Object value = this.getObject(dsName);
		if(value instanceof List)
		{
			return (List) value;
		}
		else
		{
			return new ArrayList();
		}**/
	}

	/**
	 *
	 * 描述：获取指定名称结果集的第一行内容
	 * 作者：李炜
	 * 时间：Jul 11, 2013 3:12:42 PM
	 * @param dsName
	 * @return
	 */
	public KVMap getData(String dsName)
	{
		List<KVMap> dataList = getList(dsName);
		if(dataList != null && !dataList.isEmpty())
		{
			return dataList.get(0);
		}else {
			return null;
		}
		
	}

	public KVMap getData()
	{
		if (dsNameList.size()>0) {
			return getData(dsNameList.get(0).getName());
		}else {
			return null;
		}
		
	}

	/**
	 * 获取第一个结果集指定字段的值
	 */
	public String getString(String name)
	{
		return getData().getStr(name);
	}

	/**
	 * 获取第一个结果集指定字段的值
	 */
	public String getString(String dsName, String name)
	{
		return getData(dsName).getStr(name);
	}

	/**
	 *
	 * 描述：获取默认的结果集
	 * 作者：李炜
	 * 时间：Apr 29, 2014 5:43:14 PM
	 * @return
	 */
	public List<KVMap> getList()
	{
		if (dsNameList.size()>0) {
			return getList(dsNameList.get(0).getName());
		}else {
			return null;
		}
		
	}

	/**
	 *
	 * 描述：获取缺省的分页数据
	 * 作者：李炜
	 * 时间：Jul 11, 2013 3:21:34 PM
	 * @return
	 */
	public PageObject<KVMap> getPage()
	{
		if (getDsNameArr().size()>0) {
			String dsName=getDsNameArr().get(0).getName();
			return getPage(dsName);
		}else {
			return null;
		}

	}

	/**
	 *
	 * 描述：获取分页数据
	 * 作者：李炜
	 * 时间：Jul 9, 2013 7:36:14 PM
	 * @return
	 */
	public PageObject<KVMap> getPage(String dsName)
	{
		return pageMap.get(dsName);
	}

	/**  2091000-2091999
	 *
	 * 描述：
	 * 作者：李炜
	 * 时间：Dec 12, 2013 9:10:15 PM
	 * @return
	 */
	public List<ARDsName> dsNameSet()
	{
		return getDsNameArr();
	}

	/**
	 *
	 * 描述：
	 * 作者：李炜
	 * 时间：Feb 26, 2014 9:07:00 PM
	 * @param dsName
	 */
	public void setDsName(ARDsType arDsType,String dsName)
	{
		boolean s=false;
		for (ARDsName string : dsNameList) {
			if (string.getName().equals(dsName)) {
				s=true;
				break;
			}
		}
		if (!s) {
			ARDsName arDsName=new ARDsName();
			arDsName.setArDsType(arDsType);
			arDsName.setName(dsName);
			dsNameList.add(arDsName);
		}
	}

	/**
	 *
	 * 描述：返回结果集名称
	 * 作者：李炜
	 * 时间：Apr 29, 2014 6:11:50 PM
	 * @return
	 */
	public List<ARDsName> getDsNameArr()
	{
		return dsNameList;
	}

	/**
	 *
	 * 描述：删除结果集中指定的数据
	 * 作者：李炜
	 * 时间：Mar 31, 2014 1:23:11 PM
	 * @param key
	 */
	public void remove(String key)
	{
		dataMap.remove(key);
		pageMap.remove(key);
	}
	
	public Map<String, List<KVMap>> dataMap() {
		return dataMap;
	}
}
